<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>WeakMap</title>
	</head>
	<body>
		<script>
			//WeakMap 对象是一组键/值对的集合，其中的键是弱引用的。其键必须是对象，而值可以是任意的。
			//WeakMap 的 key 只能是 Object 类型。 原始数据类型 是不能作为 key 的（比如 Symbol）
			const wm1 = new WeakMap(),
				wm2 = new WeakMap(),
				wm3 = new WeakMap()
			const o1 = {},
				o2 = function () {},
				o3 = window
			wm1.set(o1, 37)
			wm1.set(o2, 'azerty')
			wm2.set(o1, o2) // value可以是任意值,包括一个对象或一个函数
			wm2.set(o3, undefined)
			wm2.set(wm1, wm2) // 键和值可以是任意对象,甚至另外一个WeakMap对象
			wm1.get(o2) // "azerty"
			wm2.get(o2) // undefined,wm2中没有o2这个键
			wm2.get(o3) // undefined,值就是undefined
			wm1.has(o2) // true
			wm2.has(o2) // false
			wm2.has(o3) // true (即使值是undefined)
			wm3.set(o1, 37)
			wm3.get(o1) // 37
			wm1.has(o1) // true
			wm1.delete(o1)
			wm1.has(o1) // false
		</script>
	</body>
</html>
